const jwt = require("jsonwebtoken");
const User = require("../models/user");
const config = require("../config/base");

class AuthController {
  async register(ctx) {
    const { username, password } = ctx.request.body;

    try {
      // 检查用户名和密码是否提供
      if (!username || !password) {
        ctx.status = 400;
        ctx.body = { error: "用户名和密码不能为空" };
        return;
      }

      // 检查用户是否已存在
      const existingUser = await User.findByUsername(username);
      if (existingUser) {
        ctx.status = 400;
        ctx.body = { error: "用户名已存在" };
        return;
      }

      // 创建新用户
      // 在注册处理函数中
      await User.create({
        username,
        password,
        nickname: username, // 可以默认使用用户名作为昵称，或者从请求中获取
      });

      const user = await User.findByUsername(username);

      console.log("新用户创建成功:", user);

      // 生成 token
      const token = jwt.sign(
        { id: user.id, username: user.username },
        config.jwt.secret,
        { expiresIn: config.jwt.expiresIn }
      );

      ctx.status = 201;
      ctx.body = {
        message: "注册成功",
        token,
        user: {
          id: user.id,
          username: user.username,
          nickname: user.nickname,
          avatar: user.avatar,
          phone: user.phone,
        },
      };
    } catch (error) {
      console.error("注册错误:", error);
      ctx.status = 500;
      ctx.body = { error: "注册失败" };
    }
  }

  async login(ctx) {
    const { username, password } = ctx.request.body;

    try {
      // 检查用户名和密码是否提供
      if (!username || !password) {
        ctx.status = 400;
        ctx.body = { error: "用户名和密码不能为空" };
        return;
      }

      // 查找用户
      const user = await User.findByUsername(username);
      if (!user) {
        ctx.status = 401;
        ctx.body = { error: "用户名或密码错误" };
        return;
      }

      // 验证密码
      const isValid = await User.verifyPassword(password, user.password);
      if (!isValid) {
        ctx.status = 401;
        ctx.body = { error: "用户名或密码错误" };
        return;
      }

      // 生成 token
      const token = jwt.sign(
        { id: user.id, username: user.username },
        config.jwt.secret,
        { expiresIn: config.jwt.expiresIn }
      );

      // 返回用户信息和token
      ctx.body = {
        token,
        user: {
          id: user.id,
          username: user.username,
          nickname: user.nickname,
          avatar: user.avatar,
          phone: user.phone,
        },
      };
    } catch (error) {
      console.error("登录错误:", error);
      ctx.status = 500;
      ctx.body = { error: "登录失败" };
    }
  }
}

module.exports = new AuthController();
